/* =============================================================================
 * PROJET           	: repartition
 * NOM DU FICHIER   	: ecriture.c
 * OBJET            	: Definition des fonctions d'ecriture de la trace
 * -----------------------------------------------------------------------------
 * DATE DE CREATION 	: 27/10/2009
 * AUTEUR           	: Sha LIU, Yves BOGE
 * ============================================================================= */

#include "ecriture.h"


char nom_fichier_trace[50] = "BOGE_LIU_chemins_";
char nom_fichier_sol[50] = "BOGE_LIU_";
char* fichier_donnees;

/* description :	programme d'ecriture de la trace pour un etat donne.
 * entree :			niveau d'indentation et donnee du pb a afficher
 * sortie :			trace dans le fichier
 */
void trace(int niv, t_donnees_pb* pb) {

	FILE* fichier = NULL;
	int i;
	
	fichier = fopen(nom_fichier_trace, "a");
	
	// indentation :
	for ( i = 1 ; i <= niv ; i++ )
		fprintf( fichier, "\t" );
	
	// affichage de la repartition courante :
	//fprintf( fichier, "%i", pb->dep->rep );
	for ( i = 0 ; i < pb->nb_pop ; i++)
		fprintf( fichier, "%i ", (pb->dep + i)->rep );
	//fprintf( fichier, "" );
	
	fclose(fichier);
}


/* description :	programme d'initialisation du fichier de trace
 * entree :			pb dont on va devoir ecrire la trace
 * sortie :			fichier vide existant
 */
void trace_init(t_donnees_pb* pb) {

	fichier_donnees = malloc(sizeof(char) * strlen(pb->region) + 1);
	strcpy(fichier_donnees, pb->region);
	strcat(nom_fichier_trace, fichier_donnees);
	
	remove(nom_fichier_trace);
}


/* description :	programme d'ecriture dans le fichier de trace
 * entree :			texte a ecrire
 * sortie :			ecriture dans le fichier
 */
void ecrire(char* chaine) {
	
	FILE* fichier = NULL;
	
	fichier = fopen(nom_fichier_trace, "a");
	
	fprintf(fichier, "%s", chaine);
	
	fclose(fichier);
}


/* description :	programme d'ecriture de la solution
 * entree :			donnees du probleme resolu
 * sortie :			ecriture dans le fichier
 */
void ecrire_sol(t_donnees_pb* pb_init, t_donnees_pb* pb_fin) {
	
	FILE* fichier = NULL;
	int i;
	t_donnees_pb* j;
	
	fichier_donnees = malloc(sizeof(char) * strlen(pb_init->region) + 1);
	strcpy(fichier_donnees, pb_init->region);
	strcat(nom_fichier_sol, fichier_donnees);
	
	fichier = fopen(nom_fichier_sol, "w");
	
	fprintf(fichier, "%s\t;\n", pb_init->region);
	fprintf(fichier, "nom\t\t;\tP\t;\tN\t;\tm\t;\n");
	
	// parcours de départements
	for ( i = 0 ; i < pb_init->nb_pop ; i++ ) {
		fprintf(fichier, "%s\t;\t%i\t;\t%i\t;\t%i", (pb_init->dep + i)->nom,
			 (pb_init->dep + i)->pop, (pb_init->dep + i)->rep, pb_fin->nb_sol );
		
		// parcours des solutions
		for ( j = pb_fin ; j != NULL ; j = (t_donnees_pb*)j->sol_suiv )
			fprintf(fichier, "\t;\t%i", (j->dep + i)->rep );
		fprintf(fichier, "\n");
	}
	
	fclose(fichier);
}
